#include <iostream>
#include <cstdlib>
#include <unistd.h>
using namespaces std;

bool daemonize()
{
    // 创建子进程 关闭父进程，让子进程称为孤儿进程
    pid_t pid = fork();
    if (pid < 0)
    {
        return false;
    }
    else if (pid > 0)
    {
        // 父进程退出
        exit(0);
    }

    // 设置文件权限掩码为0
    umask(0); 

    // 创建新的会话
    pid_t sid = setsid(); 
    if (sid < 0)
    {
        return false;
    }

    // 切换工作目录到根目录
    if (chdir("/") < 0)
    {
        return false;
    }

    // 关闭标准输入、输出和错误
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    // 重定向标准输入、输出和错误到/dev/null
    open("/dev/null", O_RDONLY);  // 标准输入
    open("/dev/null", O_WRONLY);  // 标准输出
    open("/dev/null", O_WRONLY);  // 标准错误
    return true;

    /*
    利用daemon函数创建守护进程
    if (daemon(0, 0) == -1)
    {
        return false;
    }
    return true;
    */
}